package leetcode.code1220;

import leetcode.IDebug;
import leetcode.helper.HelpDebug;

/**
 * 执行用时：5 ms, 在所有 Java 提交中击败了82.08%的用户
 *
 * 内存消耗：35.2 MB, 在所有 Java 提交中击败了83.96%的用户
 *
 * 通过测试用例：43 / 43
 */
public class Solution implements IDebug {
//	每个元音 'a' 后面都只能跟着 'e'
//	每个元音 'e' 后面只能跟着 'a' 或者是 'i'
//	每个元音 'i' 后面 不能 再跟着另一个 'i'
//	每个元音 'o' 后面只能跟着 'i' 或者是 'u'
//	每个元音 'u' 后面只能跟着 'a'
	public static final int M = (int) 1e9 + 7;

	public int countVowelPermutation(int n) {
		long a1 = 1, e1 = 1, i1 = 1, o1 = 1, u1 = 1;
		long a2, e2, i2, o2, u2;
		for (int i = 2; i <= n; i++) {
			a2 = e1 + i1 + u1;
			e2 = a1 + i1;
			i2 = e1 + o1;
			o2 = i1;
			u2 = i1 + o1;
			a1 = a2 % M;
			e1 = e2 % M;
			i1 = i2 % M;
			o1 = o2 % M;
			u1 = u2 % M;
		}
		return (int) ((a1 + e1 + i1 + o1 + u1) % M);
	}

	@Override
	public void debug1() {
		HelpDebug.compare(5, this.countVowelPermutation(1));

	}

	@Override
	public void debug2() {
		HelpDebug.compare(10, this.countVowelPermutation(2));

	}

	@Override
	public void debug3() {
		HelpDebug.compare(68, this.countVowelPermutation(5));

	}

	@Override
	public void debug4() {
		HelpDebug.compare(5, this.countVowelPermutation(1));

	}

	public static void main(String[] args) {
		Solution so = new Solution();
		so.debug1();
		so.debug2();
		so.debug3();
		so.debug4();

	}

}
